#include <errno.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include "my_log.h"
zlog_category_t *g_zc = NULL;

// 检查目录是否存在，如果不存在则创建它
int ensure_directory_exists(const char *path, mode_t mode)
{
    struct stat info;
    if (stat(path, &info) == 0)
    {
        // 如果stat函数返回0，说明文件或目录存在
        if (S_ISDIR(info.st_mode))
        {
            // 并且它是一个目录
            printf("Directory %s already exists.\n", path);
            return 0; // 成功，目录已存在
        }
        else
        {
            // 但路径存在且不是一个目录
            fprintf(stderr, "Error: %s exists but is not a directory.\n", path);
            return -1; // 失败，路径存在但不是目录
        }
    }
    else
    {
        // 如果stat函数返回非0值，说明文件或目录不存在
        if (errno == ENOENT)
        {
            // ENOENT 表示 "No such file or directory"，这是我们期望的错误码
            if (mkdir(path, mode) == 0)
            {
                // 创建目录成功
                printf("Directory %s created successfully.\n", path);
                return 0; // 成功，目录已创建
            }
            else
            {
                // 创建目录失败
                perror("mkdir");
                return -1; // 失败，无法创建目录
            }
        }
        else
        {
            // stat函数因为其他原因失败
            perror("stat");
            return -1; // 失败，无法检查目录状态
        }
    }
}

int log_init(void)
{
    int ret;

    ensure_directory_exists(LOG_NAND_PATH,0755);
    ensure_directory_exists(LOG_RAM_PATH,0755);

    ret = zlog_init(LOG_CFG_PATH);
    if (ret)
    {
        printf("zlog init %s failed\n", LOG_CFG_PATH);
        return -1;
    }

    g_zc = zlog_get_category(LOG_CAT_NAME);
    if (g_zc == NULL)
    {
        printf("zlog_get_category get %s failed\n", LOG_CAT_NAME);
        return -1;
    }
    return 0;
}

void log_deinit(void)
{
    zlog_fini();
    return;
}